# coding:utf-8
# 创建一个复杂的GUI
# 加入time.sleep()控制进度栏
# 使用QThread线程
import time

from PyQt5 import QtCore, QtWidgets, QtGui
from QtUI05 import complex
import sys


class MainWindow(object):
    def __init__(self):
        app = QtWidgets.QApplication(sys.argv)
        MainWindow = QtWidgets.QMainWindow()
        self.ui = complex.Ui_MainWindow()
        self.ui.setupUi(MainWindow)

        self.update_date()
        self.update_calendar()

        self.set_dial()
        self.set_lcd()

        # self.zero_process()

        # self.click_radio3()

        self.update_progressbar()

        self.set_font()

        MainWindow.show()
        sys.exit(app.exec_())

    # 修改日期修改器数值
    def update_date(self):
        self.ui.dateEdit.setDate(self.ui.calendarWidget.selectedDate())

    # 日历信号槽
    def update_calendar(self):
        self.ui.calendarWidget.selectionChanged.connect(self.update_date)

    # 设置LCD数字
    def set_lcd(self):
        self.ui.lcdNumber.display(self.ui.dial.value())
        # print(self.ui.dial.value())

    # 刻度盘信号槽
    def set_dial(self):
        self.ui.dial.valueChanged['int'].connect(self.set_lcd)

    # 按钮信息槽
    def update_progressbar(self):
        self.ui.radioButton.clicked.connect(self.start_progressbar)
        self.ui.radioButton_2.clicked.connect(self.stop_progressbar)
        self.ui.radioButton_3.clicked.connect(self.rest_progressbar)

    # 添加一个进度栏计数器方法，用来启动线程管理器
    def progressbar_counter(self, start_value=0):
        self.run_thread = RunThread(parent=None, counter_start=start_value)
        self.run_thread.start()
        self.run_thread.counter_value.connect(self.set_progressbar)

    # 设置进度栏的值
    def set_progressbar(self, counter):
        if not self.stop_progress:
            self.ui.progressBar.setValue(counter)

    # 启动进度栏
    def start_progressbar(self):
        self.stop_progress = False
        self.progress_value = self.ui.progressBar.value()
        # 修改一下进度栏的启动方法start_progressbar()。删除while循环，添加进度栏计数器到其中（因为进度栏计数器中已经实现了while循环增加数值）
        self.progressbar_counter(self.progress_value)

    # 停止进度栏
    def stop_progressbar(self):
        self.stop_progress = True
        try:
            self.run_thread.stop()
        except:
            pass

    # 重设进度栏
    def rest_progressbar(self):
        self.progress_value = 0
        self.ui.progressBar.reset()
        self.stop_progress = False

    # 字体选择
    def set_font(self):
        self.ui.fontComboBox.activated['QString'].connect(self.ui.label.setText)


class RunThread(QtCore.QThread):
    # 定义一个新的信号
    # 通过实例化QtCore.pyqtSignal(int)定义了一个新的信号counter_value，这个值会用来更新进度栏。然后设置了RunThread()类中的一些默认属性。
    counter_value = QtCore.pyqtSignal(int)

    def __init__(self, parent=None, counter_start=0):
        super(RunThread, self).__init__(parent)  # super().__init__()等同于super(A, self).__init__()
        self.counter = counter_start
        self.is_running = True

    # 在run()方法中，我们通过一个while循环来不断累加计数器的值，并且将累加的计数器的值通过定义的信号counter_value发送出去。
    def run(self):
        while self.counter < 100 and self.is_running == True:
            time.sleep(0.1)
            self.counter += 1
            print(self.counter)
            # 发出一个新值的信号
            self.counter_value.emit(self.counter)

    # 在stop()方法中，我们设置线程的运行状态为Fasle，然后使用QThread的terminate()方法确保线程完全的被停止。
    def stop(self):
        self.is_running = False
        print('线程停止中...')
        self.terminate()


if __name__ == "__main__":
    MainWindow()
